Лабораторна робота № 7. Текстури: режими фільтрації, режими взаємодії текстури з|із| об'єктом, що накладається, автоматична генерація координат текстур.
Мета|ціль| роботи.
Дати уявлення про можливості|спроможності| накладення текстур| на поверхні об'єктів засобами|коштами| OPENGL|.
Необхідні теоретичні відомості.
Текстура – одновимірне, двомірне або тривимірне зображення, яке має безліч асоційованих з ним параметрів, що визначають яким чином проводитиметься накладення зображення на поверхню. Простіше кажучи, текстура – це зображення, що накладається на поверхню. З фізичної точки зору текстура - масив даних, наприклад колірних, світлових або колірних і альфа. Кожен елемент цього масиву називається текселем. Координати текстур – координати текселя, що призначається вершині.
Загальноприйняті імена для координат текстур – s, t, r, q.
Для використання текстур| необхідно виконати наступну|таку| послідовність дій:*|
1. Підготовка зображення для використання в текстурі
Завантаження|загрузка| зображення з|із| файлу.
2. Створення|створіння| текстури
Генерація унікального імені текстури*|
Виконання операції первинного зв’язування*|
Пов'язання|зв'язування| зображення з текстурою*|
Установка режимів фільтрації текстури
Установка параметрів взаємодії об'єкту, з|із| текстурою, що накладається.
Установка режиму мозаїчного накладення текстури.
Автоматична генерація координат текстур, ефект віддзеркалення|відображення|.
3. Використання текстури
Вибір текстури для використання (вторинне|повторне| скріплення|зв'язування|).
Узгодження геометричних і текстур координат
Створення|створіння| ефекту віддзеркалення|відображення| за допомогою текстур|.
* - Зірочкою позначені обов'язкові пункти.
Підготовка зображення для використання в текстурі.
Перший етап виконується при ініціалізації OPENGL|.
OPENGL| має свій формат зберігання зображень. Підготовчий етап полягає в тому, що б перетворити зображення у формат OPENGL|. У бібліотеці GLAUX| є|наявний| функція, яка прочитує зображення з|із| DIB| або BMP| файлу і автоматично перетворює його до формату OPENGL|.
AUX_RGBImageRec*| auxDIBImageLoad|(strFile|);
Функція повертає покажчик на структуру типу|типу| AUX_RGBImageRec|, яка зберігає саме зображення і його основні параметри – ширину і висоту.
struct| AUX_RGBImageRec|
{unsigned char *data; // зображення GLint sizeX; // ширина зображення GLint sizeY; // висота зображення};
Передаване значення – шлях|колія| до файлу із|із| зображенням.
Приклад|зразок| використання функції auxDIBImageLoad| – завантаження|загрузка| зображення з|із| файлу sky|.bmp у об'єкт структури ImageSky|.
AUX_RGBImageRec| *ImageSky;ImageSky = auxDIBImageLoad|(“sky|.bmp”);
Створення|створіння| текстури
Цей етап, як і підготовка зображення, зазвичай|звично| виконується під час ініціалізації OPENGL|.
Для того, що б вирішити текстурування| використовується функція
glEnable|(GL_TEXTURE_2D|);
Єдиний параметр цієї функції визначає тип текстур|, використовуваних в програмі. Зазвичай|звично| цей параметр приймає значення GL_TEXTURE_2D|
1) Генерація унікального імені текстури
Кожна текстура, яка використовується в OPENGL| повинна мати своє унікальне ім'я – ідентифікатор типа|типу| GLuint|. Для автоматичної генерації цього ідентифікатора служить функція
void| glGenTextures|(GLsizei| n, GLLuint| *textures);
Передавані параметры:| n кількість ідентифікаторівtextures|, що генеруються масив, куди будуть записані cгенеровані| ідентифікатори
Приклад|зразок| генерації унікальних ідентифікаторів в першому випадку для однієї текстури, в другому – для п'яти текстур|.
GLuint| SingleTex|;
Gluint| ArrayTex|[5];
glGenTextures(1 &SingleTex);// Генерація одного ідентифікатора
glGenTextures(5 &ArrayTex); // Генерація п'яти ідентифікаторів
2) Первинне скріплення|зв'язування|
Перш ніж задати конкретне зображення текстурі необхідно провести|виробляти| операцію первинного скріплення|зв'язування|. При цьому створюється новий об'єкт текстури, і передане|передавати...